package org.de.maeyer.statistic.view;

import static org.eclipse.swt.SWT.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Display;

/**
 * @author Peter De Maeyer
 */
public class ViewConfigurationImpl implements ViewConfiguration {

	private final List<Color> colors;

	private int index = 0;

	private final Map<Object, Color> colorsByValue = new HashMap<Object, Color>();

	public ViewConfigurationImpl(Display display) {
		colors = new ArrayList<Color>(10);
		colors.add(display.getSystemColor(COLOR_YELLOW));
		colors.add(display.getSystemColor(COLOR_DARK_CYAN));
		colors.add(display.getSystemColor(COLOR_RED));
		colors.add(display.getSystemColor(COLOR_DARK_BLUE));
		colors.add(display.getSystemColor(COLOR_DARK_MAGENTA));
		colors.add(display.getSystemColor(COLOR_GREEN));
		colors.add(display.getSystemColor(COLOR_MAGENTA));
		colors.add(display.getSystemColor(COLOR_BLUE));
		colors.add(display.getSystemColor(COLOR_DARK_YELLOW));
		colors.add(display.getSystemColor(COLOR_DARK_RED));
		colors.add(display.getSystemColor(COLOR_DARK_GREEN));
		colors.add(display.getSystemColor(COLOR_CYAN));
	}

	@Override
	public Color getColor(Object value) {
		if (colorsByValue.containsKey(value)) {
			return colorsByValue.get(value);
		}
		Color color = colors.get(index++ % colors.size());
		colorsByValue.put(value, color);
		return color;
	}

	@Override
	public Color getModeColor(Object value) {
		return getColor(value);
	}
}
